package com.h3c.ptability.service;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.h3c.ptability.dto.electronicSign.PtEsignRecordDTO;
import com.h3c.ptability.dto.electronicSign.callback.FinishDocUrlBean;
import com.h3c.ptability.entity.PtEsignRecord;
import com.h3c.ptability.vo.PtEsignRecordVO;

import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;

/**
 * 员工签署明细电子文件记录接口类
 *
 * @author chenyifan
 * @since 2022-05-19 10:20:00
 */
public interface IPtEsignRecordService extends IService<PtEsignRecord> {

    /**
     * 保存电子签章记录(失败的和正常的)
     * 如果是模板全都是公司签章的主动调用就只是生成record记录
     *
     * @param success
     * @param userInfo
     * @param sceneType
     * @param sceneId
     * @param appId
     * @param failReason
     * @param jsonArray
     * @param signFlowId orgSign表示只需要公司静默盖章的特殊记录
     * @param signProcessInfo
     * @return 保存的recordId
     */
    String saveEsignRecord(Boolean success, JSONObject userInfo,
                           Integer sceneType,
                           String sceneId,
                           String appId,
                           String failReason,
                           JSONArray jsonArray, String signFlowId, String signUrl,
                           String signProcessInfo,String creatorInfo);

    /**
     * 判断用户工号list里面是否含有异常的该场景的记录
     *
     * @param workerIdList 员工工号list
     * @param sceneType    场景类型
     * @return 不符合的员工工号list
     */
    List<String> judgeWorkerIdsNormal(List<String> workerIdList, Integer sceneType);

    /**
     * 判断记录是否已经完结（是否还需要公司静默签署）
     *
     * @param flowId
     * @return
     */
    Map<String, List<String>> judgeRecordIsOver(String flowId);


    /**
     * 根据flowId获取记录信息
     *
     * @param flowId 个人签章签章系统的记录id
     * @return
     */
    PtEsignRecord getRecordByFlowId(String flowId);


    /**
     * 根据flowId更新记录信息
     *
     * @param flowId
     * @param esignRecord
     */
    void updateRecordByFlowId(String flowId, PtEsignRecord esignRecord);

    /**
     * 根据signFlowId获取员工工号
     *
     * @param flowId
     * @return 员工工号
     */
    String getWorkerIdByFlowId(String flowId);

    /**
     * 根据记录id删除记录和记录相关联的数据
     *
     * @param recordId
     */
    void deleteRecordAndInfoById(String recordId);

    /**
     * 保存回调的参数
     * @param flowId
     * @param docUrlBeanList
     * @param isWaste  是否是作废流程
     */
    void saveCallBackParams(String flowId, List<FinishDocUrlBean> docUrlBeanList, Boolean isWaste);

    /**
     * 作废签署流程
     * @param record
     * @param cancelFileInfos
     */
    void wasteRecordAndInfoById(PtEsignRecord record,List<String> cancelFileInfos);

    /**
     * 根据作废流程id获取对应记录
     * @param cancelFlowId
     * @return
     */
    PtEsignRecord getRecordByCancelFlowId(String cancelFlowId);

    /**
     * 分页查询记录
     * @param recordDTO
     * @return
     */
    IPage<PtEsignRecordVO> selectPage(PtEsignRecordDTO recordDTO);

    /**
     * 导出签署记录
     * @param recordDTO
     * @param response
     */
    void downloadRecord(PtEsignRecordDTO recordDTO, HttpServletResponse response);
}

